﻿using dnAnalytics.Math;
using NUnit.Framework;

namespace dnAnalytics.Tests.Math
{
    [TestFixture]
    public class ComplexMath_TanTest
    {
        [Test]
        public void Tan()
        {
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, 1.19209289550780998537e-7)), new Complex(0.0, 1.19209289550780433848e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, -1.19209289550780998537e-7)), new Complex(0.0, -1.19209289550780433848e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, 5.0e-1)), new Complex(0.0, 4.62117157260009758502e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, -5.0e-1)), new Complex(0.0, -4.62117157260009758502e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, 1.0)), new Complex(0.0, 7.61594155955764888119e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, -1.0)), new Complex(0.0, -7.61594155955764888119e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, 2.0)), new Complex(0.0, 9.64027580075816883946e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, -2.0)), new Complex(0.0, -9.64027580075816883946e-1), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(0.0, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, 0.0)), new Complex(1.19209289550781563226e-7, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, 0.0)), new Complex(-1.19209289550781563226e-7, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, 1.19209289550780998537e-7)), new Complex(1.1920928955077986916e-7, 1.19209289550782127914e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, -1.19209289550780998537e-7)), new Complex(1.1920928955077986916e-7, -1.19209289550782127914e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, 1.19209289550780998537e-7)), new Complex(-1.1920928955077986916e-7, 1.19209289550782127914e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, -1.19209289550780998537e-7)), new Complex(-1.1920928955077986916e-7, -1.19209289550782127914e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, 5.0e-1)), new Complex(9.37518755156906950334e-8, 4.62117157260014923167e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, -5.0e-1)), new Complex(9.37518755156906950334e-8, -4.62117157260014923167e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, 5.0e-1)), new Complex(-9.37518755156906950334e-8, 4.62117157260014923167e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, -5.0e-1)), new Complex(-9.37518755156906950334e-8, -4.62117157260014923167e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, 1.0)), new Complex(5.00648428933648718814e-8, 7.61594155955769433461e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, -1.0)), new Complex(5.00648428933648718814e-8, -7.61594155955769433461e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, 1.0)), new Complex(-5.00648428933648718814e-8, 7.61594155955769433461e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, -1.0)), new Complex(-5.00648428933648718814e-8, -7.61594155955769433461e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, 2.0)), new Complex(8.42223463692232587918e-9, 9.64027580075817851838e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, -2.0)), new Complex(8.42223463692232587918e-9, -9.64027580075817851838e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, 2.0)), new Complex(-8.42223463692232587918e-9, 9.64027580075817851838e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, -2.0)), new Complex(-8.42223463692232587918e-9, -9.64027580075817851838e-1), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.19209289550780998537e-7, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
 //           TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.19209289550780998537e-7, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, 0.0)), new Complex(5.46302489843790513255e-1, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, 0.0)), new Complex(-5.46302489843790513255e-1, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, 1.19209289550780998537e-7)), new Complex(5.46302489843780432863e-1, 1.54786874104679875408e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, -1.19209289550780998537e-7)), new Complex(5.46302489843780432863e-1, -1.54786874104679875408e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, 1.19209289550780998537e-7)), new Complex(-5.46302489843780432863e-1, 1.54786874104679875408e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, -1.19209289550780998537e-7)), new Complex(-5.46302489843780432863e-1, -1.54786874104679875408e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, 5.0e-1)), new Complex(4.0389645531602573987e-1, 5.64083141267498498301e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, -5.0e-1)), new Complex(4.0389645531602573987e-1, -5.64083141267498498301e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, 5.0e-1)), new Complex(-4.0389645531602573987e-1, 5.64083141267498498301e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, -5.0e-1)), new Complex(-4.0389645531602573987e-1, -5.64083141267498498301e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, 1.0)), new Complex(1.95577310065933999348e-1, 8.42966204845783228749e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, -1.0)), new Complex(1.95577310065933999348e-1, -8.42966204845783228749e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, 1.0)), new Complex(-1.95577310065933999348e-1, 8.42966204845783228749e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, -1.0)), new Complex(-1.95577310065933999348e-1, -8.42966204845783228749e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, 2.0)), new Complex(3.02159873228775745529e-2, 9.79940849961738063073e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, -2.0)), new Complex(3.02159873228775745529e-2, -9.79940849961738063073e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, 2.0)), new Complex(-3.02159873228775745529e-2, 9.79940849961738063073e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, -2.0)), new Complex(-3.02159873228775745529e-2, -9.79940849961738063073e-1), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(5.0e-1, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
 //           TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-5.0e-1, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, 0.0)), new Complex(1.55740772465490223051, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, 0.0)), new Complex(-1.55740772465490223051, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, 1.19209289550780998537e-7)), new Complex(1.5574077246548264166, 4.08353664972140578674e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, -1.19209289550780998537e-7)), new Complex(1.5574077246548264166, -4.08353664972140578674e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, 1.19209289550780998537e-7)), new Complex(-1.5574077246548264166, 4.08353664972140578674e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, -1.19209289550780998537e-7)), new Complex(-1.5574077246548264166, -4.08353664972140578674e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, 5.0e-1)), new Complex(8.0687741216308496805e-1, 1.04283072834436108334), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, -5.0e-1)), new Complex(8.0687741216308496805e-1, -1.04283072834436108334), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, 5.0e-1)), new Complex(-8.0687741216308496805e-1, 1.04283072834436108334), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, -5.0e-1)), new Complex(-8.0687741216308496805e-1, -1.04283072834436108334), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, 1.0)), new Complex(2.71752585319511716529e-1, 1.08392332733869454348), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, -1.0)), new Complex(2.71752585319511716529e-1, -1.08392332733869454348), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, 1.0)), new Complex(-2.71752585319511716529e-1, 1.08392332733869454348), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, -1.0)), new Complex(-2.71752585319511716529e-1, -1.08392332733869454348), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, 2.0)), new Complex(3.38128260798966902844e-2, 1.01479361614663356812), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, -2.0)), new Complex(3.38128260798966902844e-2, -1.01479361614663356812), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, 2.0)), new Complex(-3.38128260798966902844e-2, 1.01479361614663356812), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, -2.0)), new Complex(-3.38128260798966902844e-2, -1.01479361614663356812), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
 //           TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(1.0, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
 //           TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-1.0, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, 0.0)), new Complex(-2.18503986326151899164, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, 0.0)), new Complex(2.18503986326151899164, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, 1.19209289550780998537e-7)), new Complex(-2.18503986326133968913, 6.883620266963823194e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, -1.19209289550780998537e-7)), new Complex(-2.18503986326133968913, -6.883620266963823194e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, 1.19209289550780998537e-7)), new Complex(2.18503986326133968913, 6.883620266963823194e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, -1.19209289550780998537e-7)), new Complex(2.18503986326133968913, -6.883620266963823194e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, 5.0e-1)), new Complex(-8.50878121144937689981e-1, 1.32128658377119172407), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, -5.0e-1)), new Complex(-8.50878121144937689981e-1, -1.32128658377119172407), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, 5.0e-1)), new Complex(8.50878121144937689981e-1, 1.32128658377119172407), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, -5.0e-1)), new Complex(8.50878121144937689981e-1, -1.32128658377119172407), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, 1.0)), new Complex(-2.43458201185725252703e-1, 1.16673625724091988181), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, -1.0)), new Complex(-2.43458201185725252703e-1, -1.16673625724091988181), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, 1.0)), new Complex(2.43458201185725252703e-1, 1.16673625724091988181), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, -1.0)), new Complex(2.43458201185725252703e-1, -1.16673625724091988181), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, 2.0)), new Complex(-2.83929528682322890117e-2, 1.02383559457047268829), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, -2.0)), new Complex(-2.83929528682322890117e-2, -1.02383559457047268829), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, 2.0)), new Complex(2.83929528682322890117e-2, 1.02383559457047268829), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, -2.0)), new Complex(2.83929528682322890117e-2, -1.02383559457047268829), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(2.0, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-2.0, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, 0.0)), new Complex(-4.79341238626542857159e-1, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, 0.0)), new Complex(4.79341238626542857159e-1, 0.0), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, 1.19209289550780998537e-7)), new Complex(-4.79341238626534480166e-1, 1.46599772339822753325e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, -1.19209289550780998537e-7)), new Complex(-4.79341238626534480166e-1, -1.46599772339822753325e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, 1.19209289550780998537e-7)), new Complex(4.79341238626534480166e-1, 1.46599772339822753325e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, -1.19209289550780998537e-7)), new Complex(4.79341238626534480166e-1, -1.46599772339822753325e-7), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, 5.0e-1)), new Complex(-3.59344691191258128235e-1, 5.41716250417887329949e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, -5.0e-1)), new Complex(-3.59344691191258128235e-1, -5.41716250417887329949e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, 5.0e-1)), new Complex(3.59344691191258128235e-1, 5.41716250417887329949e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, -5.0e-1)), new Complex(3.59344691191258128235e-1, -5.41716250417887329949e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, 1.0)), new Complex(-1.77637086921766769528e-1, 8.26442970158583129592e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, -1.0)), new Complex(-1.77637086921766769528e-1, -8.26442970158583129592e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, 1.0)), new Complex(1.77637086921766769528e-1, 8.26442970158583129592e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, -1.0)), new Complex(1.77637086921766769528e-1, -8.26442970158583129592e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, 2.0)), new Complex(-2.79067860702819187579e-2, 9.76923254969577828273e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, -2.0)), new Complex(-2.79067860702819187579e-2, -9.76923254969577828273e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, 2.0)), new Complex(2.79067860702819187579e-2, 9.76923254969577828273e-1), 5e-014);
            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, -2.0)), new Complex(2.79067860702819187579e-2, -9.76923254969577828273e-1), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(8.388608e6, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, 8.388608e6)), new Complex(0.0, 1.0), 5e-014);
//            TestHelper.TestRelativeError(ComplexMath.Tan(new Complex(-8.388608e6, -8.388608e6)), new Complex(0.0, -1.0), 5e-014);
        }
    }
}